/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedbeans;

import beans.Atualizacao;
import beans.Usuario;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import persistence.DAO;
import persistence.DAOUsuario;
import persistence.EMF;

@ManagedBean
@SessionScoped
public class UsuarioMB {

    private Usuario us;
    private DAOUsuario daoUser;
    private DAO dao;
    private HttpSession session;
    private String data;
    private String senhaNova;
    private String senhaOld;
    private List<String> lista = new ArrayList<String>();

    public UsuarioMB() {
        us = new Usuario();
        dao = new DAO(EMF.getEntityManager(), Usuario.class);
        daoUser = new DAOUsuario(EMF.getEntityManager());
        if (session == null) {
            session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
        } else {
            session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        }
        for(int d = 0; d<50;d++){
            lista.add("teste " + d);
        }
        Authentication authentication = (Authentication) SecurityContextHolder.getContext().getAuthentication();

        if (authentication != null) {
            Object obj = authentication.getPrincipal();
            if (obj instanceof org.springframework.security.core.userdetails.User) {
                String username = ((org.springframework.security.core.userdetails.User) obj).getUsername();
                us = daoUser.BuscaLoginSenha(username);
                session.setAttribute("usuarioLogado", us);
                System.out.println("Nome usuario " + us.getNome());
            }else{
                System.out.println("NAO É OBJETO CERTO");
            }
        }else{
            System.out.println("NAO TEM OBJETO USUARIO");
        }
    }

    public List<String> getLista() {
        return lista;
    }

    public void setLista(List<String> lista) {
        this.lista = lista;
    }

    public String getData() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        data = sdf.format(us.getDataNasc());
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public Usuario getUs() {
        return us;
    }

    public void setUs(Usuario us) {
        this.us = us;
    }

    public String salvar() {
                System.out.println("Nome ");
        Usuario u = daoUser.BuscaLoginSenha(us.getLogin());
        if (u == null) {
            try {
                us.setSenha(daoUser.criptografaSenha(us.getSenha()));
                us.setFotoPerfil("css/img/perfil/semFoto.jpg");
                us.setMensagem("");
                us.setCidade("");
                us.setEstado("");
                us.setPais("");
                us.setAuthority("ROLE_USR");
                dao.salva(us);
                session.setAttribute("logado", us);
                return "index";
            } catch (NoSuchAlgorithmException ex) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Falha ao cadastrar usuário"));
                return null;
            }
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuário já cadastrado"));
        }
        return null;
    }

    public String atualizar() {
        
        boolean at = atualizacoes();
        System.out.println("AT_______________________________________AT \n" + at);
        if(at){
            Atualizacao a = new Atualizacao();
            a.setDataAtualiza(Calendar.getInstance().getTime());
            a.setUserPublica(us);
            a.setAlvo("atualizou o perfil");
            a.setIdAlvo(1l);
            dao.salva(a);
            for(int x = 0; x < us.getAmigos().size();x++){
                List<Atualizacao> ats = us.getAmigos().get(x).getAtualizaçoes();
                ats.add(a);
                us.getAmigos().get(x).setAtualizaçoes(ats);
                dao.atualiza(us.getAmigos().get(x));
            }
        dao.atualiza(us);
        }else{
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Nenhuma alteração realizada"));
        }
        
        return "home2";
    }
    
     public String mudarSenha() throws NoSuchAlgorithmException {
        int gravar = 0;
        if (senhaNova.equals("")) {
            gravar = 1;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Campo nova senha é obrigatório", ""));
        }
        if (senhaOld.equals("")) {
            gravar = 1;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Campo senha atual é obrigatório", ""));
        }
        if (gravar == 0) {
            if (daoUser.criptografaSenha(senhaOld).equals(us.getSenha())) {
                us.setSenha(daoUser.criptografaSenha(senhaNova));
                dao.atualiza(us);
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Senha modificada"));
                return "nova";
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("A senha atual informada não é igual à senha atual"));
                return null;
            }
        } else {
            return "";
        }
    }
     
     public boolean atualizacoes(){
         Usuario antigo = (Usuario) dao.recupera(us.getId());
         int alter = 0;
         if(us.getCidade().equals(antigo.getCidade())){
             alter = 1;
         }
         if(us.getEstado().equals(antigo.getEstado())){
             alter = 1;
         }
         if(us.getPais().equals(antigo.getPais())){
             alter = 1;
         }
         if(us.getNome().equals(antigo.getNome())){
             alter = 1;
         }
         if(us.getSobrenome().equals(antigo.getSobrenome())){
             alter = 1;
         }
         if(us.getDataNasc().equals(antigo.getDataNasc())){
             alter = 1;
         }
         if(us.getFotoPerfil().equals(antigo.getFotoPerfil())){
             alter = 1;
         }
         if(us.getMensagem().equals(antigo.getMensagem())){
             alter = 1;
         }
         if(alter==1){
             return false;
         }else{
             return true;
         }
     }

}
